// 1、导入系统模块
// 导入path模块
const path =require('path')

// 2、导入第三方模块
// 2.1、导入koa模块
const Koa = require('koa')
// 2.2、创建Koa实例app
const app = new Koa()

// 3、导入第三方模块
// 3.1、导入koa-static静态资源映射模块
const KoaStatic =require('koa-static')
// 3.2、导入参数校验模块
const parameter =require('koa-parameter')
// 3.3、导入koa-body中间件
const {default: koaBody} = require('koa-body')

// 4、导入自定义模块
// 4.1、导入错误处理函数
const errorHandler = require('../app/errorHadler')

// 5、导入路由
// const userRouter = require('../router/user.route')
// const goodsRouter = require('../router/goods.route')
const router = require('../router')

// 6、注册中间件
// 6.1注册中间件,开启支持文件上传的配置
app.use(koaBody(
    {
        multipart: true,
        formidable: {
            // 不推荐使用相对路径
            // 在option里的相对路径，不是当前文件的相对路径，相对process。cwd路径，可以使用./src/upload
            uploadDir: path.join(__dirname,'../upload'),
            keepExtensions: true,
        },
        // 打开delete支持数组传参
        parsedMethods:['POST','PUT','PATCH','DELETE']
    }
))
// 6.2、注册静态资源模块
app.use(KoaStatic(path.join(__dirname,'../upload')))
// 6.3、注册koa-parameter参数校验模块
app.use(parameter(app))
// 6.4注册用户路由
// app.use(userRouter.routes())
// app.use(goodsRouter.routes())
app.use(router.routes())
// 6.5、路由错误提示，不报404
app.use(router.allowedMethods())

// 7、统一错误处理
app.on('error', errorHandler)

// 8、导出app
module.exports = app